home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / MOR55SRC.ZIP / MORIA / SOURCE / EAT.C < prev    next >
C/C++ Source or Header  |  1992-12-07  |  5KB  |  232 lines

  1. /* source/eat.c: food code
  2.  
  3.    Copyright (c) 1989-92 James E. Wilson, Robert A. Koeneke
  4.  
  5.    This software may be copied and distributed for educational, research, and
  6.    not for profit purposes provided that this copyright and statement are
  7.    included in all such copies. */
  8.  
  9. #include "config.h"
  10. #include "constant.h"
  11. #include "types.h"
  12. #include "externs.h"
  13.  
  14. #ifdef USG
  15. #include <string.h>
  16. #else
  17. #include <strings.h>
  18. #endif
  19.  
  20. /* Eat some food.                    -RAK-    */
  21. void eat()
  22. {
  23.   int32u i;
  24.   int j, k, item_val, ident;
  25.   register struct flags *f_ptr;
  26.   register struct misc *m_ptr;
  27.   register inven_type *i_ptr;
  28. #ifdef ATARIST_MWC
  29.   int32u holder;
  30. #endif
  31.  
  32.   free_turn_flag = TRUE;
  33.   if (inven_ctr == 0)
  34.     msg_print("But you are not carrying anything.");
  35.   else if (!find_range(TV_FOOD, TV_NEVER, &j, &k))
  36.     msg_print("You are not carrying any food.");
  37.   else if (get_item(&item_val, "Eat what?", j, k, CNIL, CNIL))
  38.     {
  39.       i_ptr = &inventory[item_val];
  40.       free_turn_flag = FALSE;
  41.       i = i_ptr->flags;
  42.       ident = FALSE;
  43.       while (i != 0)
  44.     {
  45.       j = bit_pos(&i) + 1;
  46.       /* Foods                    */
  47.       switch(j)
  48.         {
  49.         case 1:
  50.           f_ptr = &py.flags;
  51.           f_ptr->poisoned += randint(10) + i_ptr->level;
  52.           ident = TRUE;
  53.           break;
  54.         case 2:
  55.           f_ptr = &py.flags;
  56.           f_ptr->blind += randint(250) + 10*i_ptr->level + 100;
  57.           draw_cave();
  58.           msg_print("A veil of darkness surrounds you.");
  59.           ident = TRUE;
  60.           break;
  61.         case 3:
  62.           f_ptr = &py.flags;
  63.           f_ptr->afraid += randint(10) + i_ptr->level;
  64.           msg_print("You feel terrified!");
  65.           ident = TRUE;
  66.           break;
  67.         case 4:
  68.           f_ptr = &py.flags;
  69.           f_ptr->confused += randint(10) + i_ptr->level;
  70.           msg_print("You feel drugged.");
  71.           ident = TRUE;
  72.           break;
  73.         case 5:
  74.           f_ptr = &py.flags;
  75.           f_ptr->image += randint(200) + 25*i_ptr->level + 200;
  76.           msg_print("You feel drugged.");
  77.           ident = TRUE;
  78.           break;
  79.         case 6:
  80.           ident = cure_poison();
  81.           break;
  82.         case 7:
  83.           ident = cure_blindness();
  84.           break;
  85.         case 8:
  86.           f_ptr = &py.flags;
  87.           if (f_ptr->afraid > 1)
  88.         {
  89.           f_ptr->afraid = 1;
  90.           ident = TRUE;
  91.         }
  92.           break;
  93.         case 9:
  94.           ident = cure_confusion();
  95.           break;
  96.         case 10:
  97.           ident = TRUE;
  98.           lose_str();
  99.           break;
  100.         case 11:
  101.           ident = TRUE;
  102.           lose_con();
  103.           break;
  104. #if 0  /* 12 through 15 are not used */
  105.         case 12:
  106.           ident = TRUE;
  107.           lose_int();
  108.           break;
  109.         case 13:
  110.           ident = TRUE;
  111.           lose_wis();
  112.           break;
  113.         case 14:
  114.           ident = TRUE;
  115.           lose_dex();
  116.           break;
  117.         case 15:
  118.           ident = TRUE;
  119.           lose_chr();
  120.           break;
  121. #endif
  122.         case 16:
  123.           if (res_stat (A_STR))
  124.         {
  125.           msg_print("You feel your strength returning.");
  126.           ident = TRUE;
  127.         }
  128.           break;
  129.         case 17:
  130.           if (res_stat (A_CON))
  131.         {
  132.           msg_print("You feel your health returning.");
  133.           ident = TRUE;
  134.         }
  135.           break;
  136.         case 18:
  137.           if (res_stat (A_INT))
  138.         {
  139.           msg_print("Your head spins a moment.");
  140.           ident = TRUE;
  141.         }
  142.           break;
  143.         case 19:
  144.           if (res_stat (A_WIS))
  145.         {
  146.           msg_print("You feel your wisdom returning.");
  147.           ident = TRUE;
  148.         }
  149.           break;
  150.         case 20:
  151.           if (res_stat (A_DEX))
  152.         {
  153.           msg_print("You feel more dextrous.");
  154.           ident = TRUE;
  155.         }
  156.           break;
  157.         case 21:
  158.           if (res_stat (A_CHR))
  159.         {
  160.           msg_print("Your skin stops itching.");
  161.           ident = TRUE;
  162.         }
  163.           break;
  164.         case 22:
  165.           ident = hp_player(randint(6));
  166.           break;
  167.         case 23:
  168.           ident = hp_player(randint(12));
  169.           break;
  170.         case 24:
  171.           ident = hp_player(randint(18));
  172.           break;
  173. #if 0  /* 25 is not used */
  174.         case 25:
  175.           ident = hp_player(damroll(3, 6));
  176.           break;
  177. #endif
  178.         case 26:
  179.           ident = hp_player(damroll(3, 12));
  180.           break;
  181.         case 27:
  182.           take_hit(randint(18), "poisonous food.");
  183.           ident = TRUE;
  184.           break;
  185. #if 0 /* 28 through 30 are not used */
  186.         case 28:
  187.           take_hit(randint(8), "poisonous food.");
  188.           ident = TRUE;
  189.           break;
  190.         case 29:
  191.           take_hit(damroll(2, 8), "poisonous food.");
  192.           ident = TRUE;
  193.           break;
  194.         case 30:
  195.           take_hit(damroll(3, 8), "poisonous food.");
  196.           ident = TRUE;
  197.           break;
  198. #endif
  199.         default:
  200.           msg_print("Internal error in eat()");
  201.           break;
  202.         }
  203.       /* End of food actions.                */
  204.     }
  205.       if (ident)
  206.     {
  207.       if (!known1_p(i_ptr))
  208.         {
  209.           /* use identified it, gain experience */
  210.           m_ptr = &py.misc;
  211.           /* round half-way case up */
  212.           m_ptr->exp += (i_ptr->level + (m_ptr->lev >> 1)) / m_ptr->lev;
  213.           prt_experience();
  214.  
  215.           identify (&item_val);
  216.           i_ptr = &inventory[item_val];
  217.         }
  218.     }
  219.       else if (!known1_p(i_ptr))
  220.     sample (i_ptr);
  221.       add_food(i_ptr->p1);
  222. #ifdef ATARIST_MWC
  223.       py.flags.status &= ~(holder = PY_WEAK|PY_HUNGRY);
  224. #else
  225.       py.flags.status &= ~(PY_WEAK|PY_HUNGRY);
  226. #endif
  227.       prt_hunger();
  228.       desc_remain(item_val);
  229.       inven_destroy(item_val);
  230.     }
  231. }
  232.